/*Copyright (C) 2009 Careil Baptiste

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

#ifndef DAMES_UTILITAIRES_HEADER
#define DAMES_UTILITAIRES_HEADER

#include "Dames_constantes.h"
#include "../types/types.h"

///////////////////////////////////////////////////////////
/// Permet lidentation du tableau lors de son affichage
///////////////////////////////////////////////////////////
void Dames_IdentArray();

///////////////////////////////////////////////////////////
/// Permet la mis en forme et l'affichage du tableau
///////////////////////////////////////////////////////////
void Dames_DisplayArray(const DAMES_CASEVALUE array[DAMES_ARRAY_SIZE][DAMES_ARRAY_SIZE]);

///////////////////////////////////////////////////////////
/// Permet d'afficher les consignes en fonction de l'étape du tour
///////////////////////////////////////////////////////////
void Dames_DisplayConsignes(DAMES_TURNSTEP step);

///////////////////////////////////////////////////////////
/// Permet l'affichage du jeu: le titre, le tour, le tableau et
/// les consignes.
///////////////////////////////////////////////////////////
void Dames_Display(const DAMES_CASEVALUE array[DAMES_ARRAY_SIZE][DAMES_ARRAY_SIZE], const char *currentPlayer, DAMES_TURNSTEP step, int nbTour);

///////////////////////////////////////////////////////////
/// Initialise le tableau de jeu
///////////////////////////////////////////////////////////
void Dames_InitArray(DAMES_CASEVALUE array[DAMES_ARRAY_SIZE][DAMES_ARRAY_SIZE]);

///////////////////////////////////////////////////////////
/// Permet de déplacer un élément du tableau (curseur, dame,...)
///////////////////////////////////////////////////////////
void Dames_Deplacer(DAMES_CASEVALUE array[DAMES_ARRAY_SIZE][DAMES_ARRAY_SIZE], DAMES_CASEVALUE element, IPoint depart, IPoint arrivee);

///////////////////////////////////////////////////////////
/// Permet d'enlever un élément du tableau (curseur, dame, ...)
///////////////////////////////////////////////////////////
void Dames_Enlever(DAMES_CASEVALUE array[DAMES_ARRAY_SIZE][DAMES_ARRAY_SIZE], DAMES_CASEVALUE element, IPoint lieu);

///////////////////////////////////////////////////////////
/// Permet d'ajouter un élément au tableau (curseur, dame, ...)
///////////////////////////////////////////////////////////
void Dames_Ajouter(DAMES_CASEVALUE array[DAMES_ARRAY_SIZE][DAMES_ARRAY_SIZE], DAMES_CASEVALUE element, IPoint lieu);

///////////////////////////////////////////////////////////
/// Permet de savoir si l'emplacement désigné est une case blanche
///////////////////////////////////////////////////////////
bool Dames_IsCaseBlancheIP(IPoint pt);
bool Dames_IsCaseBlancheXY(int x, int y);

///////////////////////////////////////////////////////////
/// Permet de connaitre la couleur du pion
///////////////////////////////////////////////////////////
DAMES_CASEVALUE Dames_GetCouleurPion(DAMES_CASEVALUE array[DAMES_ARRAY_SIZE][DAMES_ARRAY_SIZE], IPoint pt);

///////////////////////////////////////////////////////////
/// Permet de connaitre les attributs pion à la case indiquée
///////////////////////////////////////////////////////////
DAMES_CASEVALUE Dames_GetPion(DAMES_CASEVALUE array[DAMES_ARRAY_SIZE][DAMES_ARRAY_SIZE], IPoint pt);

///////////////////////////////////////////////////////////
/// Permet de déplacer le curseur dans la direction indiquée
///////////////////////////////////////////////////////////
void Dames_MoveCursor(DAMES_CASEVALUE array[DAMES_ARRAY_SIZE][DAMES_ARRAY_SIZE], IPoint *curseur, DIRECTION dir);

#endif
